package com.pay.utils;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix; 

import javax.imageio.ImageIO; 

import java.io.File; 
import java.io.OutputStream; 
import java.io.IOException; 
import java.util.Hashtable;
import java.awt.image.BufferedImage; 
   
   
public final class QrCodeToImageWriter { 
   
	  private static final int BLACK = 0xFF000000; 
	  private static final int WHITE = 0xFFFFFFFF; 
	   
	  private QrCodeToImageWriter() {} 
   
     
	  public static BufferedImage toBufferedImage(BitMatrix matrix) { 
	    int width = matrix.getWidth(); 
	    int height = matrix.getHeight(); 
	    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
	    for (int x = 0; x < width; x++) { 
	      for (int y = 0; y < height; y++) { 
	        image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE); 
	      } 
	    } 
	    return image; 
	  } 
	   
	     
	  public static void writeToFile(BitMatrix matrix, String format, File file) 
	      throws IOException { 
	    BufferedImage image = toBufferedImage(matrix); 
	    if (!ImageIO.write(image, format, file)) { 
	      throw new IOException("Could not write an image of format " + format + " to " + file); 
	    } 
	  } 
	   
	     
	  public static void writeToStream(BitMatrix matrix, String format, OutputStream stream) 
	      throws IOException { 
	    BufferedImage image = toBufferedImage(matrix); 
	    if (!ImageIO.write(image, format, stream)) { 
	      throw new IOException("Could not write an image of format " + format); 
	    } 
	  } 
	  
   /**
	 * 生成二维码图片
	 * @param imagePath   	        文件位置
	 * @param context		        二维码内容（可以是一个url，也可以是json）
	 * @param imageName		        文件名  带后缀的
	 * @param width	                            图片宽度
	 * @param height	                  图片高度
	 * @throws IOException
	 * @throws WriterException 
	 */
	public static void generatorQRCodeImage(File file,String context,int width,int height) throws IOException, WriterException
	{
		//判断目录是否存在 
		if(!file.getParentFile().isDirectory())
		{
			//不存在则创建该目录  
			file.mkdirs();
			file.createNewFile();
		}
		Hashtable<EncodeHintType, String> hints= new Hashtable<EncodeHintType, String>();   
	    hints.put(EncodeHintType.CHARACTER_SET, "utf-8");   
	    BitMatrix bitMatrix = new MultiFormatWriter().encode(context, BarcodeFormat.QR_CODE, width, height,hints);
	    String suffix = file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf(".")+1);
	    QrCodeToImageWriter.writeToFile(bitMatrix,suffix , file); 
	}
   
}